﻿using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Text;
using System.Web;
using System.Web.Configuration;

namespace HafriyatService
{
    public enum EvrakTipleri : byte
    {

        ToptanAlisIrsaliyesi,
        PerakendeAlisIrsaliyesi,

        ToptanAlisIadeIrsaliyesi,
        PerakendeAlisIadeIrsaliyesi,

        ToptanSatisIrsaliyesi,
        PerakendeSatisIrsaliyesi,

        ToptanSatisIadeIrsaliyesi,
        PerakendeSatisIadeIrsaliyesi,

        GelenDepoSevk,
        GidenDepoSevk,

        AlinanSiparis,
        VerilenSiparis,
        SubeSiparis,

        ToptanSatisFaturasi,
        PerakendeSatisFaturasi,

        ToptanSatisIadeFaturasi,
        PerakendeSatisIadeFaturasi,

        Tahsilat,

        HizmetFaturasi,
        MasrafFaturasi
    }

    public class HareketBilgileri
    {
        public int Id { get; set; }
        public int Satir { get; set; }
        public string StokKodu { get; set; }
        public string StokAdi { get; set; }
        public decimal Miktar { get; set; }
        public decimal Fiyat { get; set; }
        public decimal Isk1Tutar { get; set; }
        public decimal Isk2Tutar { get; set; }
        public decimal Isk3Tutar { get; set; }
        public decimal Isk4Tutar { get; set; }
        public decimal Isk5Tutar { get; set; }
        public decimal BurutTutar { get; set; }
        public int KdvSira { get; set; }
        public decimal KdvOrani { get; set; }
        public decimal KdvTutari { get; set; }
        public string Barkod { get; set; }
        public int SipDbcNo { get; set; }
        public int SipRecNo { get; set; }
        public string[] SeriNolar { get; set; }
    }

    public class Evrak
    {
        List<HareketBilgileri> _rows = new List<HareketBilgileri>();
        public DateTime Tarih { get; set; }
        public string BelgeNo { get; set; }
        public string Seri { get; set; }
        public int Sira { get; set; }
        public EvrakTipleri EvrakCinsi { get; set; }
        public string CariKodu { get; set; }
        public string SrmMerkezKodu { get; set; }
        public string PlasiyerKodu { get; set; }
        public string MikroKullanici { get; set; }
        public int GirisDepoNo { get; set; }
        public int CikisDepoNo { get; set; }
        public int FirmaNo { get; set; }
        public int SubeNo { get; set; }
        public string ProjeKodu { get; set; }
        public List<HareketBilgileri> Rows { get { return _rows; } }
    }

    public class MalHizmet
    {
        public int KdvSira { get; set; }
        public decimal KdvOran { get; set; }
        public decimal Fiyat { get; set; }
    }

    public class Database
    {
        public string getTime()
        {
            string sonuc = "1900-01-01";
            string st = WebConfigurationManager.ConnectionStrings["Db"].ConnectionString;
            using (SqlConnection cn = new SqlConnection(st))
            {
                cn.Open();
                using (SqlCommand cmd = new SqlCommand("select CAST(YEAR(GETDATE()) AS VARCHAR(4)) + '-'  +  CAST(MONTH(GETDATE()) AS VARCHAR(2))  + '-'  +  CAST(DAY(GETDATE()) AS VARCHAR(2)) ", cn))
                {
                    SqlDataReader rd = cmd.ExecuteReader();
                    if (rd.HasRows)
                    {
                        rd.Read();
                        sonuc = rd.GetString(0);
                        rd.Close();
                    }
                }
                cn.Close();
            }
            return sonuc;
        }
        public string VeriOlustur(DateTime tarih)
        {
            Schema sema = new Schema();
            string st = WebConfigurationManager.ConnectionStrings["Db"].ConnectionString;
            using (SqlConnection cn = new SqlConnection(st))
            {
                cn.Open();
                using (SqlCommand cmd = new SqlCommand("SELECT hiz_kod, hiz_isim  FROM HIZMET_HESAPLARI  WHERE        (hiz_lastup_date >=@tarih)", cn))
                {
                    cmd.Parameters.Add("@tarih", SqlDbType.DateTime).Value = tarih;

                    SqlDataReader rd = cmd.ExecuteReader();
                    while (rd.Read())
                    {
                        AracTipi arctip = new AracTipi();
                        arctip.Kodu = rd.GetString(0);
                        arctip.Adi = rd.GetString(1);
                        sema.AracTipleri.Add(arctip);
                    }
                    rd.Close();


                    cmd.CommandText = "SELECT        cari_kod, cari_unvan1  FROM            CARI_HESAPLAR  WHERE        (cari_lastup_date >= @tarih)";
                    rd = cmd.ExecuteReader();
                    while (rd.Read())
                    {
                        Arac arc = new Arac();
                        arc.Kodu = rd.GetString(0);
                        arc.Adi = rd.GetString(1);
                        sema.Araclar.Add(arc);
                    }
                    rd.Close();


                    cmd.CommandText = "SELECT        pro_kodu, pro_adi FROM            PROJELER WHERE        (pro_lastup_date >= @tarih)";
                    rd = cmd.ExecuteReader();
                    while (rd.Read())
                    {
                        Santiye san = new Santiye();
                        san.Kodu = rd.GetString(0);
                        san.Adi = rd.GetString(1);
                        sema.Santiyeler.Add(san);
                    }
                    rd.Close();


                    cmd.CommandText = "SELECT        som_kod, som_isim  FROM            SORUMLULUK_MERKEZLERI  WHERE        (som_lastup_date >= @tarih)";
                    rd = cmd.ExecuteReader();
                    while (rd.Read())
                    {
                        DokumYeri dok = new DokumYeri();
                        dok.Kodu = rd.GetString(0);
                        dok.Adi = rd.GetString(1);
                        sema.DokumYerleri.Add(dok);
                    }
                    rd.Close();


                    cmd.CommandText = "SELECT hmgrp_ismi  FROM  HIZMET_MASRAF_GRUPLARI ";
                    rd = cmd.ExecuteReader();
                    while (rd.Read())
                    {
                        MalzemeCinsi mal = new MalzemeCinsi();
                        mal.Adi = rd.GetString(0);
                        sema.MalzemeCinsleri.Add(mal);
                    }
                    rd.Close();

                }
                cn.Close();
            }
            return JsonConvert.SerializeObject(sema);
        }

        public string AddRecord(Fis fis)
        {
            string sonuc = "";
            string st = WebConfigurationManager.ConnectionStrings["Db"].ConnectionString;
            using (SqlConnection cn = new SqlConnection(st))
            {
                cn.Open();
                SqlTransaction trn = cn.BeginTransaction(IsolationLevel.ReadUncommitted);
                string EvrakSeri = "";
                int EvrakSira = 1;

                if (fis.IslemCinsi == 0) //masraf faturası
                {
                    Evrak evr = new Evrak();
                    evr.BelgeNo = "";
                    evr.CariKodu = fis.Plaka;
                    evr.CikisDepoNo = 1;
                    evr.EvrakCinsi = EvrakTipleri.MasrafFaturasi;
                    evr.FirmaNo = 0;
                    evr.GirisDepoNo = 1;
                    evr.MikroKullanici = "0";
                    evr.PlasiyerKodu = "";
                    evr.ProjeKodu = fis.Santiye;
                    EvrakSeri = fis.TerminalNo;
                    EvrakSira = MaxEvrakNo(evr.EvrakCinsi, EvrakSeri);
                    evr.Seri = EvrakSeri;
                    evr.Sira = EvrakSira;
                    evr.SrmMerkezKodu = fis.DokumYeri;
                    evr.SubeNo = 0;
                    evr.Tarih = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);


                    HareketBilgileri hr = new HareketBilgileri();
                    MalHizmet hz = getBilgi(fis.AracTipi, false);
                    hr.Barkod = "";
                    hr.SeriNolar = new string[] { };
                    hr.SipDbcNo = 0;
                    hr.SipRecNo = 0;
                    hr.StokAdi = "";
                    hr.StokKodu = fis.AracTipi;
                    if (hz != null)
                    {
                        if (fis.Fiyat < 1)
                        {
                            hr.Fiyat = hz.Fiyat;
                        }
                        else
                        {
                            hr.Fiyat = fis.Fiyat;
                        }

                        hr.BurutTutar = hr.Fiyat;
                        hr.KdvSira = hz.KdvSira;
                        hr.KdvTutari = hr.Fiyat * hz.KdvOran / (100 + hz.KdvOran);
                        hr.Miktar = 1;
                        hr.Satir = 0;
                    }
                    evr.Rows.Add(hr);

                    HizmetFaturasiEkle(evr, trn);
                }
                else
                {
                    Evrak evr = new Evrak();
                    evr.BelgeNo = "";
                    evr.CariKodu = fis.Plaka;
                    evr.CikisDepoNo = 1;
                    evr.EvrakCinsi = EvrakTipleri.ToptanSatisFaturasi;
                    evr.FirmaNo = 0;
                    evr.GirisDepoNo = 1;
                    evr.MikroKullanici = "0";
                    evr.PlasiyerKodu = "";
                    evr.ProjeKodu = fis.Santiye;
                    EvrakSeri = fis.TerminalNo;
                    EvrakSira = MaxEvrakNo(evr.EvrakCinsi, EvrakSeri);
                    evr.Seri = EvrakSeri;
                    evr.Sira = EvrakSira;
                    evr.SrmMerkezKodu = fis.DokumYeri;
                    evr.SubeNo = 0;
                    evr.Tarih = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);

                    HareketBilgileri hr = new HareketBilgileri();
                    MalHizmet hz = getBilgi(fis.AracTipi, true);
                    hr.Barkod = "";
                    hr.SeriNolar = new string[] { };
                    hr.SipDbcNo = 0;
                    hr.SipRecNo = 0;
                    hr.StokAdi = "";
                    hr.StokKodu = fis.AracTipi;
                    if (hz != null)
                    {
                        if (fis.Fiyat < 1)
                        {
                            hr.Fiyat = hz.Fiyat;
                        }
                        else
                        {
                            hr.Fiyat = fis.Fiyat;
                        }
                        hr.BurutTutar = hr.Fiyat;
                        hr.KdvSira = hz.KdvSira;
                        hr.KdvTutari = hr.Fiyat * hz.KdvOran / (100 + hz.KdvOran);
                        hr.Miktar = fis.Litre;
                        hr.Satir = 0;
                    }
                    evr.Rows.Add(hr);

                    SatisFaturasiEkle(evr, trn);
                }

                using (SqlCommand cmd = new SqlCommand("if exists(select * from HAFRIYAT_HAREKETLERI where UniqueID=@UniqueID) UPDATE       HAFRIYAT_HAREKETLERI SET TerminalNo = @TerminalNo, IslemTipi = @IslemTipi, Tarih = @Tarih, DokumYeri = @DokumYeri, Plaka = @Plaka, Santiye = @Santiye, MalzemeTipi = @MalzemeTipi, MikroSeri = @MikroSeri, MikroSira = @MikroSira,AracTipi=@AracTipi,Litre=@Litre,Fiyat=@Fiyat WHERE        (UniqueID = @UniqueID) else INSERT INTO HAFRIYAT_HAREKETLERI (UniqueID, TerminalNo, IslemTipi, Tarih, DokumYeri, Plaka, Santiye, MalzemeTipi, MikroSeri, MikroSira,AracTipi,Litre,Fiyat) VALUES        (@UniqueID,@TerminalNo,@IslemTipi,@Tarih,@DokumYeri,@Plaka,@Santiye,@MalzemeTipi,@MikroSeri,@MikroSira,@AracTipi,@Litre,@Fiyat)", cn))
                {
                    cmd.Transaction = trn;
                    cmd.Parameters.Add("@UniqueID", SqlDbType.NVarChar, 50).Value = fis.UniqueID;
                    cmd.Parameters.Add("@TerminalNo", SqlDbType.VarChar, 10).Value = fis.TerminalNo;
                    cmd.Parameters.Add("@IslemTipi", SqlDbType.TinyInt).Value = fis.IslemCinsi;
                    cmd.Parameters.Add("@Tarih", SqlDbType.DateTime).Value = fis.Tarih;
                    cmd.Parameters.Add("@DokumYeri", SqlDbType.VarChar, 25).Value = fis.DokumYeri;
                    cmd.Parameters.Add("@Plaka", SqlDbType.VarChar, 25).Value = fis.Plaka;
                    cmd.Parameters.Add("@Santiye", SqlDbType.VarChar, 25).Value = fis.Santiye;
                    cmd.Parameters.Add("@MalzemeTipi", SqlDbType.VarChar, 50).Value = fis.MalzemeTipi;
                    cmd.Parameters.Add("@AracTipi", SqlDbType.VarChar, 25).Value = fis.AracTipi;
                    cmd.Parameters.Add("@MikroSeri", SqlDbType.VarChar, 10).Value = EvrakSeri;
                    cmd.Parameters.Add("@MikroSira", SqlDbType.Int).Value = EvrakSira;
                    cmd.Parameters.Add("@Fiyat", SqlDbType.Decimal).Value = fis.Fiyat;
                    cmd.Parameters.Add("@Litre", SqlDbType.Decimal).Value = fis.Litre;
                    cmd.ExecuteNonQuery();
                }



                try
                {
                    trn.Commit();
                    cn.Close();
                    sonuc = "OK";
                }
                catch (Exception ex)
                {
                    sonuc = ex.Message;
                    if (trn != null)
                        trn.Rollback();
                }
                finally
                {
                    if (cn != null && cn.State == ConnectionState.Open)
                        cn.Close();
                }
            }
            return sonuc;
        }

        public MalHizmet getBilgi(string kodu, bool stok)
        {
            string st = WebConfigurationManager.ConnectionStrings["Db"].ConnectionString;
            MalHizmet hiz = null;
            using (SqlConnection cn = new SqlConnection(st))
            {
                cn.Open();
                using (SqlCommand cmd = new SqlCommand("SELECT        sto_toptan_vergi as sira, dbo.fn_VergiYuzde(sto_toptan_vergi) AS oran, dbo.fn_StokSatisFiyati(sto_kod, 1, 0) AS fiyat  FROM            STOKLAR WHERE        (sto_kod = @kod)", cn))
                {

                    if (!stok)
                    {
                        cmd.CommandText = "SELECT        hiz_KDV AS sira, dbo.fn_VergiYuzde(hiz_KDV) AS oran, hiz_fiyat AS fiyat  FROM            HIZMET_HESAPLARI WHERE        (hiz_kod = @kod)";
                    }

                    cmd.Parameters.Add("@kod", SqlDbType.NVarChar, 25).Value = kodu;
                    SqlDataReader rd = cmd.ExecuteReader();
                    if (rd.HasRows)
                    {
                        rd.Read();
                        hiz = new MalHizmet();
                        hiz.Fiyat = Convert.ToDecimal(rd["fiyat"]);
                        hiz.KdvOran = Convert.ToDecimal(rd["oran"]);
                        hiz.KdvSira = Convert.ToInt32(rd["sira"]);
                        rd.Close();
                    }
                }
                cn.Close();
            }
            return hiz;
        }
        public bool SatisFaturasiEkle(Evrak evrak, SqlTransaction trn)
        {
            bool sonuc = false;
            if (evrak != null)
            {
                int recID = 0;
                if (evrak.EvrakCinsi == EvrakTipleri.ToptanSatisFaturasi)
                {
                    decimal[] vergiTutarlari = new decimal[10];
                    decimal meblag = 0;
                    decimal aratoplam = 0;
                    int satir = 0;
                    foreach (var r in evrak.Rows)
                    {
                        aratoplam = r.BurutTutar;
                        meblag = r.BurutTutar + r.KdvTutari;
                        vergiTutarlari[r.KdvSira] = r.KdvTutari;
                        satir++;
                    }

                    recID = CharEkle(evrak.EvrakCinsi, evrak.Seri, evrak.Sira, satir, evrak.Tarih, meblag, vergiTutarlari, evrak.PlasiyerKodu, evrak.CariKodu, aratoplam, evrak.BelgeNo, 0, "", 0, 0, 0, 3, "", evrak.SrmMerkezKodu, evrak.ProjeKodu, 0, trn);

                }

                if (recID > -1)
                    sonuc = SharEkle(evrak, trn, recID);
            }
            return sonuc;
        }
        public bool HizmetFaturasiEkle(Evrak evrak, SqlTransaction trn)
        {
            bool sonuc = false;
            if (evrak != null)
            {
                decimal[] vergiTutarlari;
                decimal meblag = 0;
                decimal aratoplam = 0;
                int satir = 0;
                foreach (var r in evrak.Rows)
                {
                    vergiTutarlari = new decimal[10];
                    aratoplam = r.BurutTutar - r.KdvTutari;
                    meblag = r.BurutTutar;
                    vergiTutarlari[r.KdvSira] = r.KdvTutari;

                    int recID = CharEkle(evrak.EvrakCinsi, evrak.Seri, evrak.Sira, satir, evrak.Tarih, meblag, vergiTutarlari, evrak.PlasiyerKodu, evrak.CariKodu, aratoplam, evrak.BelgeNo, 0, "", 0, 0, 0, 3, r.StokKodu, evrak.SrmMerkezKodu, evrak.ProjeKodu, r.KdvSira, trn);

                    if (recID < 0)
                        sonuc = false;

                    satir++;
                }
            }
            return sonuc;
        }

        private byte[] EvrakCins(EvrakTipleri cins, bool shar)
        {
            byte[] sonuc = new byte[4];
            switch (cins)
            {
                case EvrakTipleri.HizmetFaturasi:
                    sonuc[0] = 0;
                    sonuc[1] = 8;
                    sonuc[2] = 0;
                    sonuc[3] = 63;
                    break;
                case EvrakTipleri.ToptanAlisIrsaliyesi:
                    sonuc[0] = 0;
                    sonuc[1] = 0;
                    sonuc[2] = 0;
                    sonuc[3] = 13;
                    break;
                case EvrakTipleri.PerakendeAlisIrsaliyesi:
                    sonuc[0] = 0;
                    sonuc[1] = 1;
                    sonuc[2] = 0;
                    sonuc[3] = 13;
                    break;
                case EvrakTipleri.ToptanAlisIadeIrsaliyesi:
                    sonuc[0] = 1;
                    sonuc[1] = 0;
                    sonuc[2] = 1;
                    sonuc[3] = 1;
                    break;
                case EvrakTipleri.PerakendeAlisIadeIrsaliyesi:
                    sonuc[0] = 1;
                    sonuc[1] = 1;
                    sonuc[2] = 1;
                    sonuc[3] = 1;
                    break;
                case EvrakTipleri.ToptanSatisIrsaliyesi:
                    sonuc[0] = 1;
                    sonuc[1] = 0;
                    sonuc[2] = 0;
                    sonuc[3] = 1;
                    break;
                case EvrakTipleri.PerakendeSatisIrsaliyesi:
                    sonuc[0] = 1;
                    sonuc[1] = 1;
                    sonuc[2] = 0;
                    sonuc[3] = 1;
                    break;
                case EvrakTipleri.ToptanSatisIadeIrsaliyesi:
                    sonuc[0] = 0;
                    sonuc[1] = 0;
                    sonuc[2] = 1;
                    sonuc[3] = 13;
                    break;
                case EvrakTipleri.PerakendeSatisIadeIrsaliyesi:
                    sonuc[0] = 0;
                    sonuc[1] = 1;
                    sonuc[2] = 1;
                    sonuc[3] = 13;
                    break;
                case EvrakTipleri.AlinanSiparis:
                    sonuc[0] = 0;
                    sonuc[1] = 0;
                    sonuc[2] = 0;
                    sonuc[3] = 0;
                    break;
                case EvrakTipleri.VerilenSiparis:
                    sonuc[0] = 1;
                    sonuc[1] = 0;
                    sonuc[2] = 0;
                    sonuc[3] = 0;
                    break;
                case EvrakTipleri.GidenDepoSevk:
                case EvrakTipleri.GelenDepoSevk:
                    sonuc[0] = 2;
                    sonuc[1] = 6;
                    sonuc[2] = 0;
                    sonuc[3] = 2;
                    break;
                case EvrakTipleri.ToptanSatisFaturasi:
                    if (shar)
                    {
                        sonuc[0] = 1;
                        sonuc[1] = 0;
                        sonuc[2] = 0;
                        sonuc[3] = 4;
                    }
                    else
                    {
                        sonuc[0] = 0;
                        sonuc[1] = 6;
                        sonuc[2] = 0;
                        sonuc[3] = 63;
                    }
                    break;
                case EvrakTipleri.Tahsilat:
                    break;
                case EvrakTipleri.ToptanSatisIadeFaturasi:
                    break;
                case EvrakTipleri.MasrafFaturasi:
                    sonuc[0] = 1;
                    sonuc[1] = 8;
                    sonuc[2] = 0;
                    sonuc[3] = 0;
                    break;
                default:
                    break;
            }
            return sonuc;
        }
        public int MaxEvrakNo(EvrakTipleri tip, String seri)
        {
            string cnnString = WebConfigurationManager.ConnectionStrings["Db"].ConnectionString;
            byte[] dizi = this.EvrakCins(tip, false);
            int sira = 1;
            using (SqlConnection cn = new SqlConnection(cnnString))
            {
                cn.Open();
                using (SqlCommand cmd = new SqlCommand("", cn))
                {
                    switch (tip)
                    {
                        case EvrakTipleri.MasrafFaturasi:
                        case EvrakTipleri.HizmetFaturasi:
                        case EvrakTipleri.PerakendeSatisIadeFaturasi:
                        case EvrakTipleri.PerakendeSatisFaturasi:
                        case EvrakTipleri.ToptanSatisFaturasi:
                        case EvrakTipleri.ToptanSatisIadeFaturasi:
                        case EvrakTipleri.Tahsilat:
                            cmd.CommandText = string.Format("exec sp_executesql N'SELECT     ISNULL(MAX(cha_evrakno_sira),0) + 1 FROM         CARI_HESAP_HAREKETLERI WITH (NOLOCK) WHERE     (cha_tip = {1}) AND (cha_normal_Iade = {2}) AND (cha_evrak_tip = {3}) AND (cha_evrakno_seri = ''{0}'')'", seri, dizi[0], dizi[2], dizi[3]);
                            break;
                        case EvrakTipleri.AlinanSiparis:
                            cmd.CommandText = string.Format("exec sp_executesql N'SELECT     ISNULL(MAX(sip_evrakno_sira),0) + 1 FROM         SIPARISLER WITH (NOLOCK) WHERE     (sip_tip = 0) AND (sip_cins = 0) AND (sip_evrakno_seri = ''{0}'')'", seri);
                            break;
                        case EvrakTipleri.VerilenSiparis:
                            cmd.CommandText = string.Format("exec sp_executesql N'SELECT     ISNULL(MAX(sip_evrakno_sira),0) + 1 FROM         SIPARISLER WITH (NOLOCK) WHERE     (sip_tip = 1) AND (sip_cins = 0) AND (sip_evrakno_seri = ''{0}'')'", seri);
                            break;
                        case EvrakTipleri.GidenDepoSevk:
                        case EvrakTipleri.GelenDepoSevk:
                            cmd.CommandText = string.Format("exec sp_executesql N'SELECT     ISNULL(MAX(sth_evrakno_sira),0) + 1 as sira  FROM         STOK_HAREKETLERI WITH (NOLOCK, INDEX=NDX_STOK_HAREKETLERI_05) WHERE     (sth_tip = 2) AND (sth_evraktip = 2) AND (sth_evrakno_seri = ''{0}'')'", seri);
                            break;
                        case EvrakTipleri.PerakendeAlisIadeIrsaliyesi:
                        case EvrakTipleri.PerakendeAlisIrsaliyesi:
                        case EvrakTipleri.PerakendeSatisIadeIrsaliyesi:
                        case EvrakTipleri.PerakendeSatisIrsaliyesi:
                        case EvrakTipleri.ToptanAlisIadeIrsaliyesi:
                        case EvrakTipleri.ToptanAlisIrsaliyesi:
                        case EvrakTipleri.ToptanSatisIadeIrsaliyesi:
                        case EvrakTipleri.ToptanSatisIrsaliyesi:
                            cmd.CommandText = string.Format("exec sp_executesql N'SELECT     ISNULL(MAX(sth_evrakno_sira),0) + 1 as sira  FROM         STOK_HAREKETLERI WITH (NOLOCK, INDEX=NDX_STOK_HAREKETLERI_05) WHERE  (sth_evraktip = {1}) AND (sth_evrakno_seri = ''{0}'')'", seri, dizi[3]);
                            break;
                    }

                    sira = Convert.ToInt32(cmd.ExecuteScalar());
                }
                cn.Close();
            }
            return sira;
        }
        public bool CheckEvrakNo(EvrakTipleri tip, String seri, int sira, string cnnString)
        {
            byte[] dizi = this.EvrakCins(tip, false);
            bool evrakVar = false;
            using (SqlConnection cn = new SqlConnection(cnnString))
            {
                cn.Open();
                using (SqlCommand cmd = new SqlCommand("", cn))
                {
                    switch (tip)
                    {
                        case EvrakTipleri.MasrafFaturasi:
                        case EvrakTipleri.HizmetFaturasi:
                        case EvrakTipleri.PerakendeSatisIadeFaturasi:
                        case EvrakTipleri.PerakendeSatisFaturasi:
                        case EvrakTipleri.ToptanSatisFaturasi:
                        case EvrakTipleri.ToptanSatisIadeFaturasi:
                        case EvrakTipleri.Tahsilat:
                            cmd.CommandText = string.Format("exec sp_executesql N'SELECT     COUNT(*) FROM         CARI_HESAP_HAREKETLERI WITH (NOLOCK) WHERE     (cha_tip = {1}) AND (cha_normal_Iade = {2}) AND (cha_evrak_tip = {3}) AND (cha_evrakno_seri = ''{0}'') AND (cha_evrakno_sira={4})'", seri, dizi[0], dizi[2], dizi[3], sira);
                            break;
                        case EvrakTipleri.AlinanSiparis:
                            cmd.CommandText = string.Format("exec sp_executesql N'SELECT     COUNT(*) FROM         SIPARISLER WITH (NOLOCK) WHERE     (sip_tip = 0) AND (sip_cins = 0) AND (sip_evrakno_seri = ''{0}'') AND (sip_evrakno_sira={1})'", seri, sira);
                            break;
                        case EvrakTipleri.VerilenSiparis:
                            cmd.CommandText = string.Format("exec sp_executesql N'SELECT     COUNT(*) FROM         SIPARISLER WITH (NOLOCK) WHERE     (sip_tip = 1) AND (sip_cins = 0) AND (sip_evrakno_seri = ''{0}'')  AND (sip_evrakno_sira={1})'", seri, sira);
                            break;
                        case EvrakTipleri.GidenDepoSevk:
                        case EvrakTipleri.GelenDepoSevk:
                            cmd.CommandText = string.Format("exec sp_executesql N'SELECT     COUNT(*)  FROM         STOK_HAREKETLERI WITH (NOLOCK, INDEX=NDX_STOK_HAREKETLERI_05) WHERE     (sth_tip = 2) AND (sth_evraktip = 2) AND (sth_evrakno_seri = ''{0}'') AND (sth_evrakno_sira={1})'", seri, sira);
                            break;
                        case EvrakTipleri.PerakendeAlisIadeIrsaliyesi:
                        case EvrakTipleri.PerakendeAlisIrsaliyesi:
                        case EvrakTipleri.PerakendeSatisIadeIrsaliyesi:
                        case EvrakTipleri.PerakendeSatisIrsaliyesi:
                        case EvrakTipleri.ToptanAlisIadeIrsaliyesi:
                        case EvrakTipleri.ToptanAlisIrsaliyesi:
                        case EvrakTipleri.ToptanSatisIadeIrsaliyesi:
                        case EvrakTipleri.ToptanSatisIrsaliyesi:
                            cmd.CommandText = string.Format("exec sp_executesql N'SELECT     COUNT(*)  FROM         STOK_HAREKETLERI WITH (NOLOCK, INDEX=NDX_STOK_HAREKETLERI_05) WHERE  (sth_evraktip = {1}) AND (sth_evrakno_seri = ''{0}'') AND (sth_evrakno_sira={2})'", seri, dizi[3], sira);
                            break;
                    }

                    evrakVar = Convert.ToBoolean(cmd.ExecuteScalar());
                }
                cn.Close();
            }
            return evrakVar;
        }
        private Dictionary<int, int> KdvList(string cnnString)
        {
            Dictionary<int, int> sonuc = new Dictionary<int, int>();
            using (SqlConnection cn = new SqlConnection(cnnString))
            {
                cn.Open();
                using (SqlDataAdapter adp = new SqlDataAdapter("select dbo.fn_VergiYuzde(1) as oran union all select dbo.fn_VergiYuzde(2) union all select dbo.fn_VergiYuzde(3) union all select dbo.fn_VergiYuzde(4) union all select dbo.fn_VergiYuzde(5) union all select dbo.fn_VergiYuzde(6)", cn))
                {
                    DataTable dt = new DataTable();
                    adp.Fill(dt);
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        sonuc.Add(i + 1, Convert.ToInt32(dt.Rows[i][0]));
                    }
                }
                cn.Close();
            }
            return sonuc;
        }
        private bool SharEkle(Evrak evrak, SqlTransaction trn, int charid)
        {
            bool sonuc = false;
            StringBuilder sb = new StringBuilder();
            sb.Append(" if exists(SELECT     sth_evrakno_seri  FROM         STOK_HAREKETLERI  WHERE     (sth_evrakno_seri = @Seri) AND (sth_evrakno_sira =@Sira) AND (sth_satirno = @Satir) AND (sth_evraktip = @Evrak_Tip) AND (sth_tip=@Tip) AND (sth_cins=@Cins) and (sth_normal_iade=@Normal_iade)) ");
            sb.Append(" 		UPDATE STOK_HAREKETLERI SET ");
            sb.Append(" 							  sth_lastup_user=@kullanici, sth_lastup_date=@crDate, sth_tarih=@Evrak_Tarih, sth_tip=@Tip, sth_cins=@Cins, sth_normal_iade=@Normal_iade, sth_belge_tarih=@Evrak_Tarih,  ");
            sb.Append(" 							  sth_stok_kod=@Stok_kod, sth_cari_kodu=@Cari_kod, sth_plasiyer_kodu=@plasiyer, sth_miktar=@Miktar, sth_miktar2=@Miktar, sth_birim_pntr=1, sth_tutar=@yekun, sth_iskonto1=@isk1_tutar, sth_iskonto2=@isk2_tutar, sth_iskonto3=@isk3_tutar,  ");
            sb.Append(" 							  sth_iskonto4=@isk4_tutar, sth_iskonto5=@isk5_tutar, sth_vergi_pntr=@Kdv,sth_vergi=@kdv_tutar, sth_odeme_op=@odeme, sth_sip_recid_dbcno=@norm_sip_dbc, sth_sip_recid_recno=@norm_sip_rec, sth_fat_recid_recno=@fatrecno, sth_giris_depo_no=@GirisDepo, sth_cikis_depo_no=@CikisDepo,  ");
            sb.Append(" 							  sth_malkbl_sevk_tarihi=@Evrak_Tarih, sth_cari_srm_merkezi=@srmerkez, sth_stok_srm_merkezi=@srmerkez, sth_fis_tarihi='1899-12-30 00:00:00', sth_maliyet_ana=@Fiyat, sth_maliyet_alternatif=@Fiyat, sth_maliyet_orjinal=@Fiyat,sth_belge_no=@belge_no, ");
            sb.Append(" 							  sth_firmano=@firma_no,sth_subeno=@sube_no,sth_proje_kodu=@proje ");
            sb.Append(" 		WHERE     (sth_evrakno_seri = @Seri) AND (sth_evrakno_sira =@Sira) AND (sth_satirno = @Satir) AND (sth_evraktip = @Evrak_Tip AND (sth_tip=@Tip) AND (sth_cins=@Cins) and (sth_normal_iade=@Normal_iade)) ");
            sb.Append(" else ");
            sb.Append(" 		INSERT INTO STOK_HAREKETLERI ");
            sb.Append(" 	 (sth_RECid_DBCno, sth_RECid_RECno, sth_SpecRECno, sth_iptal, sth_fileid, sth_hidden, sth_kilitli, sth_degisti, sth_checksum, sth_create_user, sth_create_date, sth_lastup_user, sth_lastup_date,sth_special1, sth_special2, sth_special3, sth_firmano, sth_subeno, sth_tarih, sth_tip, sth_cins, sth_normal_iade, sth_evraktip, sth_evrakno_seri, sth_evrakno_sira, sth_satirno, sth_belge_no, sth_belge_tarih, sth_stok_kod, sth_isk_mas1, sth_isk_mas2, sth_isk_mas3, sth_isk_mas4, sth_isk_mas5, sth_isk_mas6, sth_isk_mas7, sth_isk_mas8, sth_isk_mas9, sth_isk_mas10, sth_sat_iskmas1, sth_sat_iskmas2, sth_sat_iskmas3, sth_sat_iskmas4, sth_sat_iskmas5, sth_sat_iskmas6, sth_sat_iskmas7, sth_sat_iskmas8, sth_sat_iskmas9, sth_sat_iskmas10, sth_pos_satis, sth_cari_cinsi, sth_cari_kodu, sth_cari_grup_no, sth_isemri_gider_kodu, sth_plasiyer_kodu, sth_har_doviz_cinsi, sth_har_doviz_kuru, sth_alt_doviz_kuru, sth_stok_doviz_cinsi, sth_stok_doviz_kuru, sth_miktar, sth_miktar2, sth_birim_pntr, sth_tutar, sth_iskonto1, sth_iskonto2, sth_iskonto3, sth_iskonto4, sth_iskonto5, sth_iskonto6, sth_masraf1, sth_masraf2, sth_masraf3, sth_masraf4, sth_vergi_pntr, sth_vergi, sth_masraf_vergi_pntr, sth_masraf_vergi, sth_netagirlik, sth_odeme_op, sth_aciklama, sth_sip_recid_dbcno, sth_sip_recid_recno, sth_fat_recid_dbcno, sth_fat_recid_recno, sth_giris_depo_no, sth_cikis_depo_no, sth_malkbl_sevk_tarihi, sth_cari_srm_merkezi, sth_stok_srm_merkezi, sth_fis_tarihi, sth_fis_sirano, sth_vergisiz_fl, sth_maliyet_ana, sth_maliyet_alternatif, sth_maliyet_orjinal, sth_adres_no, sth_parti_kodu, sth_lot_no, sth_kons_recid_dbcno, sth_kons_recid_recno, sth_proje_kodu, sth_exim_kodu, sth_otv_pntr, sth_otv_vergi) ");
            sb.Append(" 		VALUES     (0, - 1, 0, 0, 16, 0, 0, 0, 0,@kullanici,@crDate,@kullanici,@crDate, '', '', '',@firma_no,@sube_no,@Evrak_Tarih,@Tip,@Cins,@Normal_iade,@Evrak_Tip,@Seri,@Sira,@Satir,@belge_no,@Evrak_Tarih,@Stok_kod, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,@Cari_kod, 0, '',@plasiyer, 0, 1, 1, 0, 1,@Miktar,@Miktar, 1,@yekun,@isk1_tutar,@isk2_tutar,@isk3_tutar,@isk4_tutar,@isk5_tutar, 0, 0, 0, 0, 0,@Kdv,@kdv_tutar, 0, 0, 0,@odeme, '',@norm_sip_dbc,@norm_sip_rec, 0,@fatrecno,@GirisDepo,@CikisDepo,@Evrak_Tarih,@srmerkez,@srmerkez, '1899-12-30 00:00:00', 0, 0,@Fiyat,@Fiyat,@Fiyat, 1, '', 0, 0, 0,@proje, '', 0, 0) ");
            sb.Append(";update STOK_HAREKETLERI set sth_RECid_RECno=sth_RECno where sth_RECid_RECno=-1");

            DateTime defaultTarih = new DateTime(1899, 12, 31);

            try
            {
                using (SqlCommand cmd = new SqlCommand("", trn.Connection))
                {
                    cmd.Transaction = trn;
                    byte[] tipCins = EvrakCins(evrak.EvrakCinsi, true);
                    foreach (HareketBilgileri row in evrak.Rows)
                    {
                        cmd.CommandText = sb.ToString();

                        cmd.Parameters.Add("@Tip", SqlDbType.Int).Value = tipCins[0];
                        cmd.Parameters.Add("@Cins", SqlDbType.Int).Value = tipCins[1];
                        cmd.Parameters.Add("@Normal_iade", SqlDbType.Int).Value = tipCins[2];
                        cmd.Parameters.Add("@Evrak_Tip", SqlDbType.Int).Value = tipCins[3];
                        cmd.Parameters.Add("@Evrak_Tarih", SqlDbType.DateTime).Value = new DateTime(evrak.Tarih.Year, evrak.Tarih.Month, evrak.Tarih.Day);
                        cmd.Parameters.Add("@Seri", SqlDbType.VarChar).Value = evrak.Seri;
                        cmd.Parameters.Add("@Sira", SqlDbType.Int).Value = evrak.Sira;
                        cmd.Parameters.Add("@crDate", SqlDbType.DateTime).Value = DateTime.Now;
                        cmd.Parameters.Add("@Cari_kod", SqlDbType.VarChar).Value = evrak.CariKodu;
                        cmd.Parameters.Add("@plasiyer", SqlDbType.VarChar).Value = evrak.PlasiyerKodu;
                        cmd.Parameters.Add("@srmerkez", SqlDbType.VarChar).Value = evrak.SrmMerkezKodu;
                        cmd.Parameters.Add("@kullanici", SqlDbType.VarChar).Value = evrak.MikroKullanici;
                        cmd.Parameters.Add("@GirisDepo", SqlDbType.Int).Value = evrak.GirisDepoNo;
                        cmd.Parameters.Add("@CikisDepo", SqlDbType.Int).Value = evrak.CikisDepoNo;
                        cmd.Parameters.Add("@odeme", SqlDbType.Int).Value = 0; //odeme * (-1));
                        cmd.Parameters.Add("@belge_no", SqlDbType.VarChar).Value = evrak.BelgeNo;
                        cmd.Parameters.Add("@firma_no", SqlDbType.Int).Value = evrak.FirmaNo;
                        cmd.Parameters.Add("@sube_no", SqlDbType.Int).Value = evrak.SubeNo;
                        cmd.Parameters.Add("@proje", SqlDbType.VarChar).Value = evrak.ProjeKodu;
                        cmd.Parameters.Add("@Satir", SqlDbType.Int).Value = row.Satir;
                        cmd.Parameters.Add("@Stok_kod", SqlDbType.VarChar).Value = row.StokKodu;
                        cmd.Parameters.Add("@Miktar", SqlDbType.Decimal).Value = row.Miktar;
                        cmd.Parameters.Add("@yekun", SqlDbType.Decimal).Value = row.BurutTutar;
                        cmd.Parameters.Add("@isk1_tutar", SqlDbType.Decimal).Value = row.Isk1Tutar;
                        cmd.Parameters.Add("@isk2_tutar", SqlDbType.Decimal).Value = row.Isk2Tutar;
                        cmd.Parameters.Add("@isk3_tutar", SqlDbType.Decimal).Value = row.Isk3Tutar;
                        cmd.Parameters.Add("@isk4_tutar", SqlDbType.Decimal).Value = row.Isk4Tutar;
                        cmd.Parameters.Add("@isk5_tutar", SqlDbType.Decimal).Value = row.Isk5Tutar;
                        cmd.Parameters.Add("@Kdv", SqlDbType.Int).Value = row.KdvSira;
                        cmd.Parameters.Add("@fatrecno", SqlDbType.Int).Value = charid;


                        if (evrak.EvrakCinsi == EvrakTipleri.GelenDepoSevk || evrak.EvrakCinsi == EvrakTipleri.GidenDepoSevk)
                        {
                            cmd.Parameters.Add("@norm_sip_rec", SqlDbType.Int).Value = 0;
                            cmd.Parameters.Add("@norm_sip_dbc", SqlDbType.Int).Value = 0;
                        }
                        else
                        {
                            cmd.Parameters.Add("@norm_sip_rec", SqlDbType.Int).Value = row.SipRecNo;
                            cmd.Parameters.Add("@norm_sip_dbc", SqlDbType.Int).Value = row.SipDbcNo;
                        }

                        cmd.Parameters.Add("@Fiyat", SqlDbType.Decimal).Value = row.Fiyat;
                        cmd.Parameters.Add("@kdv_tutar", SqlDbType.Float).Value = row.KdvTutari;

                        cmd.ExecuteNonQuery();
                        cmd.Parameters.Clear();

                        cmd.CommandText = "SELECT     sth_RECno  FROM         STOK_HAREKETLERI  WHERE     (sth_tip = @tip) AND (sth_cins = @cins) AND (sth_normal_iade = @normIade) AND (sth_evraktip = @evrTip) AND (sth_evrakno_seri = @seri) AND (sth_evrakno_sira = @sira) AND (sth_satirno = @satir)";
                        cmd.Parameters.Add("@tip", SqlDbType.TinyInt).Value = tipCins[0];
                        cmd.Parameters.Add("@cins", SqlDbType.TinyInt).Value = tipCins[1];
                        cmd.Parameters.Add("@normIade", SqlDbType.TinyInt).Value = tipCins[2];
                        cmd.Parameters.Add("@evrTip", SqlDbType.TinyInt).Value = tipCins[3];
                        cmd.Parameters.Add("@seri", SqlDbType.VarChar).Value = evrak.Seri;
                        cmd.Parameters.Add("@sira", SqlDbType.Int).Value = evrak.Sira;
                        cmd.Parameters.Add("@satir", SqlDbType.Int).Value = row.Satir;

                        object id = cmd.ExecuteScalar();
                        cmd.Parameters.Clear();

                        if (id != null && id != DBNull.Value)
                        {
                            row.Id = Convert.ToInt32(id);
                            if (row.SeriNolar.Length > 0)
                            {
                                foreach (string seri in row.SeriNolar)
                                {
                                    SerinoHareketEkle(seri, row.StokKodu, row.Id, defaultTarih, defaultTarih, defaultTarih, defaultTarih, "", 0, "", 0, 0, 0, "", "", trn);
                                }
                            }
                        }
                    }
                }
                sonuc = true;
            }
            catch (Exception)
            {
            }
            return sonuc;
        }
        private void SerinoHareketEkle(string seriNo, string stokKodu, int sharId, DateTime garantiBaslangic, DateTime garantiBitis, DateTime alisTarihi, DateTime satisTarihi, string alisSeri, int alisSira, string satisSeri, int satisSira, decimal alisFiyat, decimal satisFiyat, string alisCari, string satisCari, SqlTransaction trn)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("if exists(select ChHar_RECno from CIHAZ_HAREKETLERI where ChHar_SeriNo= @seriNo and ChHar_StokKodu=@stokKodu and ChHar_master_recno=@sharId)");
            sb.Append("update CIHAZ_HAREKETLERI set ChHar_Spec_Rec_no=0,ChHar_iptal=0,ChHar_fileid=98,ChHar_hidden=0,ChHar_kilitli=0,ChHar_degisti=0,ChHar_checksum=0,ChHar_lastup_user=1,ChHar_lastup_date=@tarih,ChHar_special1='',ChHar_special2='',ChHar_special3='',ChHar_master_tablo=0,ChHar_master_dbcno=0 where ChHar_SeriNo=@seriNo and ChHar_StokKodu=@stokKodu and ChHar_master_recno=@sharId else ");
            sb.Append("insert into CIHAZ_HAREKETLERI (ChHar_RECid_DBCno,ChHar_RECid_RECno,ChHar_Spec_Rec_no,ChHar_iptal,ChHar_fileid,ChHar_hidden,ChHar_kilitli,ChHar_degisti,ChHar_checksum,ChHar_create_user,ChHar_create_date,ChHar_lastup_user,ChHar_lastup_date,ChHar_special1,ChHar_special2,ChHar_special3,ChHar_SeriNo,ChHar_StokKodu,ChHar_master_tablo,ChHar_master_dbcno,ChHar_master_recno) values (0,-1,0,0,98,0,0,0,0,1,@tarih,1,@tarih,'','','',@seriNo,@stokKodu,0,0,@sharId) ");
            sb.Append(";update CIHAZ_HAREKETLERI set ChHar_RECid_RECno=ChHar_RECno where ChHar_RECid_RECno=-1");

            StringBuilder sb2 = new StringBuilder();
            sb2.Append("if exists(select chz_RECno from STOK_SERINO_TANIMLARI where chz_serino= @seriNo and chz_stok_kodu=@stokKodu)");
            sb2.Append("UPDATE    STOK_SERINO_TANIMLARI SET chz_Spec_Rec_no = 0, chz_iptal = 0, chz_fileid = 94, chz_hidden = 0, chz_kilitli = 0, chz_degisti = 0, chz_checksum = 0, chz_lastup_user = 1, chz_lastup_date = @tarih, chz_special1 = '', chz_special2 = '', chz_special3 = '', chz_Tuktckodu = '', chz_GrnBasTarihi = @garantiBaslangic,chz_GrnBitTarihi = @garantiBitis, chz_aciklama1 = '', chz_aciklama2 = '', chz_aciklama3 = '', chz_al_tarih = @alisTarih, chz_al_evr_seri = @alisSeri,chz_al_evr_sira = @alisSira, chz_st_tarih = @satisTarih, chz_st_evr_seri = @satisSeri, chz_st_evr_sira = @satisSira, chz_al_fiati_ana = @alisFiyat,chz_al_fiati_alt = @alisFiyat, chz_al_fiati_orj = @alisFiyat, chz_st_fiati_ana = @satisFiyat, chz_st_fiati_alt = @satisFiyat, chz_st_fiati_orj = @satisFiyat,chz_parca_garantisi = 0, chz_parca_serino = '', chz_parca_garanti_baslangic = @garantiBaslangic, chz_parca_garanti_bitis = @garantiBitis,chz_al_cari_kodu = @alisCari, chz_st_cari_kodu = @satisCari WHERE (chz_serino = @seriNo) AND (chz_stok_kodu = @stokKodu) else ");
            sb2.Append("INSERT INTO STOK_SERINO_TANIMLARI (chz_RECid_DBCno, chz_RECid_RECno, chz_Spec_Rec_no, chz_iptal, chz_fileid, chz_hidden, chz_kilitli, chz_degisti, chz_checksum, chz_create_user,chz_create_date, chz_lastup_user, chz_lastup_date, chz_special1, chz_special2, chz_special3, chz_serino, chz_stok_kodu, chz_grup_kodu, chz_Tuktckodu,chz_GrnBasTarihi, chz_GrnBitTarihi, chz_aciklama1, chz_aciklama2, chz_aciklama3, chz_al_tarih, chz_al_evr_seri, chz_al_evr_sira, chz_al_cari_kodu, chz_st_tarih,chz_st_evr_seri, chz_st_evr_sira, chz_st_cari_kodu, chz_al_fiati_ana, chz_al_fiati_alt, chz_al_fiati_orj, chz_st_fiati_ana, chz_st_fiati_alt, chz_st_fiati_orj,chz_parca_garantisi, chz_parca_serino, chz_parca_garanti_baslangic, chz_parca_garanti_bitis) VALUES (0, - 1, 0, 0, 94, 0, 0, 0, 0, 1,@tarih, 1,@tarih, '', '', '',@seriNo,@stokKodu, '', '',@garantiBaslangic,@garantiBitis, '', '','',@alisTarih,@alisSeri,@alisSira,@alisCari,@satisTarih,@satisSeri,@satisSira,@satisCari,@alisFiyat,@alisFiyat,@alisFiyat,@satisFiyat,@satisFiyat,@satisFiyat,0,'',@garantiBaslangic,@garantiBitis) ");
            sb2.Append(";update STOK_SERINO_TANIMLARI set chz_RECid_RECno=chz_RECno where chz_RECid_RECno=-1");

            List<SqlParameter> prmList = new List<SqlParameter>();
            prmList.Add(new SqlParameter() { ParameterName = "@seriNo", SqlDbType = SqlDbType.VarChar, Size = 25, Value = seriNo });
            prmList.Add(new SqlParameter() { ParameterName = "@stokKodu", SqlDbType = SqlDbType.VarChar, Size = 25, Value = stokKodu });
            prmList.Add(new SqlParameter() { ParameterName = "@sharId", SqlDbType = SqlDbType.Int, Value = sharId });
            prmList.Add(new SqlParameter() { ParameterName = "@tarih", SqlDbType = SqlDbType.DateTime, Value = DateTime.Now });

            SqlConnection cn = trn.Connection;
            using (SqlCommand cmd = new SqlCommand(sb.ToString(), cn))
            {
                cmd.Transaction = trn;
                foreach (var item in prmList)
                {
                    cmd.Parameters.Add(item);
                }
                cmd.ExecuteNonQuery();

                prmList.Add(new SqlParameter() { ParameterName = "@alisSeri", SqlDbType = SqlDbType.VarChar, Size = 6, Value = alisSeri });
                prmList.Add(new SqlParameter() { ParameterName = "@alisSira", SqlDbType = SqlDbType.Int, Value = alisSira });
                prmList.Add(new SqlParameter() { ParameterName = "@satisSeri", SqlDbType = SqlDbType.VarChar, Size = 6, Value = satisSeri });
                prmList.Add(new SqlParameter() { ParameterName = "@satisSira", SqlDbType = SqlDbType.Int, Value = satisSira });
                prmList.Add(new SqlParameter() { ParameterName = "@alisFiyat", SqlDbType = SqlDbType.Float, Value = alisFiyat });
                prmList.Add(new SqlParameter() { ParameterName = "@satisFiyat", SqlDbType = SqlDbType.Float, Value = satisFiyat });
                prmList.Add(new SqlParameter() { ParameterName = "@alisTarih", SqlDbType = SqlDbType.DateTime, Value = alisTarihi });
                prmList.Add(new SqlParameter() { ParameterName = "@satisTarih", SqlDbType = SqlDbType.DateTime, Value = satisTarihi });
                prmList.Add(new SqlParameter() { ParameterName = "@garantiBaslangic", SqlDbType = SqlDbType.DateTime, Value = garantiBaslangic });
                prmList.Add(new SqlParameter() { ParameterName = "@garantiBitis", SqlDbType = SqlDbType.DateTime, Value = garantiBitis });
                prmList.Add(new SqlParameter() { ParameterName = "@alisCari", SqlDbType = SqlDbType.VarChar, Size = 25, Value = alisCari });
                prmList.Add(new SqlParameter() { ParameterName = "@satisCari", SqlDbType = SqlDbType.VarChar, Size = 25, Value = alisCari });

                cmd.ExecuteNonQuery();
            }
        }
        private int CharEkle(EvrakTipleri tip, string evrakSeri, int evrakSira, int satir, DateTime evrakTarihi, decimal meblag, decimal[] vergiler, string saticiKodu, string cariKodu, decimal araToplam, string belgeNo, int vade, string aciklama, decimal isk1Tutar, decimal isk2Tutar, decimal isk3Tutar, int cariCins, string kasaKodu, string srmMerkezi, string projeKodu, int kdvSira, SqlTransaction trn)
        {
            string sqlStr = "if exists(SELECT     cha_RECno FROM         CARI_HESAP_HAREKETLERI WHERE     (cha_evrak_tip = @cha_evrak_tip) AND (cha_evrakno_seri = @cha_evrakno_seri) AND (cha_evrakno_sira = @cha_evrakno_sira) AND (cha_satir_no = @cha_satir_no)) delete FROM CARI_HESAP_HAREKETLERI WHERE     (cha_evrak_tip = @cha_evrak_tip) AND (cha_evrakno_seri = @cha_evrakno_seri) AND (cha_evrakno_sira = @cha_evrakno_sira) AND (cha_satir_no = @cha_satir_no);insert into CARI_HESAP_HAREKETLERI (cha_RECid_DBCno,cha_RECid_RECno,cha_SpecRecNo,cha_iptal,cha_fileid,cha_hidden,cha_kilitli,cha_degisti,cha_CheckSum,cha_create_user,cha_create_date,cha_lastup_user,cha_lastup_date,cha_special1,cha_special2,cha_special3,cha_firmano,cha_subeno,cha_tarihi,cha_tip,cha_cinsi,cha_normal_Iade,cha_evrak_tip,cha_satir_no,cha_evrakno_seri,cha_evrakno_sira,cha_belge_no,cha_belge_tarih,cha_cari_cins,cha_kod,cha_kasa_hizmet,cha_kasa_hizkod,cha_d_cins,cha_d_kur,cha_altd_kur,cha_grupno,cha_meblag,cha_vade,cha_fis_tarih,cha_fis_sirano,cha_ft_iskonto1,cha_ft_iskonto2,cha_ft_iskonto3,cha_ft_iskonto4,cha_ft_iskonto5,cha_ft_iskonto6,cha_ft_masraf1,cha_ft_masraf2,cha_ft_masraf3,cha_ft_masraf4,cha_vergi1,cha_vergi2,cha_vergi3,cha_vergi4,cha_vergi5,cha_vergi6,cha_vergi7,cha_vergi8,cha_vergi9,cha_vergi10,cha_yuvarlama,cha_tpoz,cha_aciklama,cha_trefno,cha_sntck_poz,cha_karsidcinsi,cha_karsid_kur,cha_karsidgrupno,cha_srmrkkodu,cha_reftarihi,cha_miktari,cha_aratoplam,cha_vergipntr,cha_istisnakodu,cha_stopaj,cha_savsandesfonu,cha_vergisiz_fl,cha_satici_kodu,cha_StFonPntr,cha_pos_hareketi,cha_vardiya_tarihi,cha_vardiya_no,cha_vardiya_evrak_ti,cha_Vade_Farki_Yuz,cha_karsisrmrkkodu,cha_EXIMkodu,cha_ticaret_turu,cha_otvtutari,cha_otvvergisiz_fl,cha_projekodu,cha_yat_tes_kodu,cha_ciro_cari_kodu,cha_oivergisiz_fl,cha_meblag_ana_doviz_icin_gecersiz_fl,cha_meblag_alt_doviz_icin_gecersiz_fl,cha_meblag_orj_doviz_icin_gecersiz_fl) values (@cha_RECid_DBCno,@cha_RECid_RECno,@cha_SpecRecNo,@cha_iptal,@cha_fileid,@cha_hidden,@cha_kilitli,@cha_degisti,@cha_CheckSum,@cha_create_user,@cha_create_date,@cha_lastup_user,@cha_lastup_date,@cha_special1,@cha_special2,@cha_special3,@cha_firmano,@cha_subeno,@cha_tarihi,@cha_tip,@cha_cinsi,@cha_normal_Iade,@cha_evrak_tip,@cha_satir_no,@cha_evrakno_seri,@cha_evrakno_sira,@cha_belge_no,@cha_belge_tarih,@cha_cari_cins,@cha_kod,@cha_kasa_hizmet,@cha_kasa_hizkod,@cha_d_cins,@cha_d_kur,@cha_altd_kur,@cha_grupno,@cha_meblag,@cha_vade,@cha_fis_tarih,@cha_fis_sirano,@cha_ft_iskonto1,@cha_ft_iskonto2,@cha_ft_iskonto3,@cha_ft_iskonto4,@cha_ft_iskonto5,@cha_ft_iskonto6,@cha_ft_masraf1,@cha_ft_masraf2,@cha_ft_masraf3,@cha_ft_masraf4,@cha_vergi1,@cha_vergi2,@cha_vergi3,@cha_vergi4,@cha_vergi5,@cha_vergi6,@cha_vergi7,@cha_vergi8,@cha_vergi9,@cha_vergi10,@cha_yuvarlama,@cha_tpoz,@cha_aciklama,@cha_trefno,@cha_sntck_poz,@cha_karsidcinsi,@cha_karsid_kur,@cha_karsidgrupno,@cha_srmrkkodu,@cha_reftarihi,@cha_miktari,@cha_aratoplam,@cha_vergipntr,@cha_istisnakodu,@cha_stopaj,@cha_savsandesfonu,@cha_vergisiz_fl,@cha_satici_kodu,@cha_StFonPntr,@cha_pos_hareketi,@cha_vardiya_tarihi,@cha_vardiya_no,@cha_vardiya_evrak_ti,@cha_Vade_Farki_Yuz,@cha_karsisrmrkkodu,@cha_EXIMkodu,@cha_ticaret_turu,@cha_otvtutari,@cha_otvvergisiz_fl,@cha_projekodu,@cha_yat_tes_kodu,@cha_ciro_cari_kodu,@cha_oivergisiz_fl,@cha_meblag_ana_doviz_icin_gecersiz_fl,@cha_meblag_alt_doviz_icin_gecersiz_fl,@cha_meblag_orj_doviz_icin_gecersiz_fl);SELECT SCOPE_IDENTITY()";
            List<SqlParameter> prmList = new List<SqlParameter>();
            byte[] tipler = EvrakCins(tip, false);

            prmList.Add(new SqlParameter() { ParameterName = "@cha_RECid_DBCno", SqlDbType = SqlDbType.SmallInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_RECid_RECno", SqlDbType = SqlDbType.Int, Value = -1 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_SpecRecNo", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_iptal", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_fileid", SqlDbType = SqlDbType.SmallInt, Value = 51 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_hidden", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_kilitli", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_degisti", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_CheckSum", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_create_user", SqlDbType = SqlDbType.SmallInt, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_create_date", SqlDbType = SqlDbType.DateTime, Value = evrakTarihi });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_lastup_user", SqlDbType = SqlDbType.SmallInt, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_lastup_date", SqlDbType = SqlDbType.DateTime, Value = evrakTarihi });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_special1", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_special2", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_special3", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_firmano", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_subeno", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_tarihi", SqlDbType = SqlDbType.DateTime, Value = evrakTarihi });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_tip", SqlDbType = SqlDbType.TinyInt, Value = tipler[0] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_cinsi", SqlDbType = SqlDbType.TinyInt, Value = tipler[1] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_normal_Iade", SqlDbType = SqlDbType.TinyInt, Value = tipler[2] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_evrak_tip", SqlDbType = SqlDbType.TinyInt, Value = tipler[3] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_satir_no", SqlDbType = SqlDbType.Int, Value = satir });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_evrakno_seri", SqlDbType = SqlDbType.NVarChar, Value = evrakSeri });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_evrakno_sira", SqlDbType = SqlDbType.Int, Value = evrakSira });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_belge_no", SqlDbType = SqlDbType.NVarChar, Value = belgeNo });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_belge_tarih", SqlDbType = SqlDbType.DateTime, Value = evrakTarihi });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_cari_cins", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_kod", SqlDbType = SqlDbType.NVarChar, Value = cariKodu });

            if (tip == EvrakTipleri.ToptanSatisFaturasi)
            {
                prmList.Add(new SqlParameter() { ParameterName = "@cha_kasa_hizmet", SqlDbType = SqlDbType.TinyInt, Value = 0 });
                prmList.Add(new SqlParameter() { ParameterName = "@cha_kasa_hizkod", SqlDbType = SqlDbType.NVarChar, Value = "" });
            }
            else
            {
                prmList.Add(new SqlParameter() { ParameterName = "@cha_kasa_hizmet", SqlDbType = SqlDbType.TinyInt, Value = 3 });
                prmList.Add(new SqlParameter() { ParameterName = "@cha_kasa_hizkod", SqlDbType = SqlDbType.NVarChar, Value = kasaKodu });
            }

            prmList.Add(new SqlParameter() { ParameterName = "@cha_d_cins", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_d_kur", SqlDbType = SqlDbType.Float, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_altd_kur", SqlDbType = SqlDbType.Float, Value = 1 });

            if (cariCins == 2)
            {
                prmList.Add(new SqlParameter() { ParameterName = "@cha_grupno", SqlDbType = SqlDbType.TinyInt, Value = 1 });
            }
            else
            {
                prmList.Add(new SqlParameter() { ParameterName = "@cha_grupno", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            }

            prmList.Add(new SqlParameter() { ParameterName = "@cha_meblag", SqlDbType = SqlDbType.Float, Value = meblag });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vade", SqlDbType = SqlDbType.Int, Value = vade });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_fis_tarih", SqlDbType = SqlDbType.DateTime, Value = "1899-12-30 00:00:00" });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_fis_sirano", SqlDbType = SqlDbType.Int, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ft_iskonto1", SqlDbType = SqlDbType.Float, Value = isk1Tutar });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ft_iskonto2", SqlDbType = SqlDbType.Float, Value = isk2Tutar });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ft_iskonto3", SqlDbType = SqlDbType.Float, Value = isk3Tutar });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ft_iskonto4", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ft_iskonto5", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ft_iskonto6", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ft_masraf1", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ft_masraf2", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ft_masraf3", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ft_masraf4", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergi1", SqlDbType = SqlDbType.Float, Value = vergiler[0] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergi2", SqlDbType = SqlDbType.Float, Value = vergiler[1] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergi3", SqlDbType = SqlDbType.Float, Value = vergiler[2] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergi4", SqlDbType = SqlDbType.Float, Value = vergiler[3] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergi5", SqlDbType = SqlDbType.Float, Value = vergiler[4] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergi6", SqlDbType = SqlDbType.Float, Value = vergiler[5] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergi7", SqlDbType = SqlDbType.Float, Value = vergiler[6] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergi8", SqlDbType = SqlDbType.Float, Value = vergiler[7] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergi9", SqlDbType = SqlDbType.Float, Value = vergiler[8] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergi10", SqlDbType = SqlDbType.Float, Value = vergiler[9] });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_yuvarlama", SqlDbType = SqlDbType.Float, Value = 0 });

            if (cariCins == 4)
                prmList.Add(new SqlParameter() { ParameterName = "@cha_tpoz", SqlDbType = SqlDbType.TinyInt, Value = 1 });
            else
                prmList.Add(new SqlParameter() { ParameterName = "@cha_tpoz", SqlDbType = SqlDbType.TinyInt, Value = 0 });

            prmList.Add(new SqlParameter() { ParameterName = "@cha_aciklama", SqlDbType = SqlDbType.NVarChar, Value = aciklama });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_trefno", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_sntck_poz", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_karsidcinsi", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_karsid_kur", SqlDbType = SqlDbType.Float, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_karsidgrupno", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_srmrkkodu", SqlDbType = SqlDbType.NVarChar, Value = srmMerkezi });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_reftarihi", SqlDbType = SqlDbType.DateTime, Value = "1899-12-30 00:00:00" });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_miktari", SqlDbType = SqlDbType.Float, Value = 1 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_aratoplam", SqlDbType = SqlDbType.Float, Value = araToplam });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergipntr", SqlDbType = SqlDbType.TinyInt, Value = kdvSira });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_istisnakodu", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_stopaj", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_savsandesfonu", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vergisiz_fl", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_satici_kodu", SqlDbType = SqlDbType.NVarChar, Value = saticiKodu });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_StFonPntr", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_pos_hareketi", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vardiya_tarihi", SqlDbType = SqlDbType.DateTime, Value = "1899-12-30 00:00:00" });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vardiya_no", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_vardiya_evrak_ti", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_Vade_Farki_Yuz", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_karsisrmrkkodu", SqlDbType = SqlDbType.NVarChar, Value = srmMerkezi });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_EXIMkodu", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ticaret_turu", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_otvtutari", SqlDbType = SqlDbType.Float, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_otvvergisiz_fl", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_projekodu", SqlDbType = SqlDbType.NVarChar, Value = projeKodu });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_yat_tes_kodu", SqlDbType = SqlDbType.NVarChar, Value = "" });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_ciro_cari_kodu", SqlDbType = SqlDbType.NVarChar, Value = cariKodu });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_oivergisiz_fl", SqlDbType = SqlDbType.Bit, Value = false });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_meblag_ana_doviz_icin_gecersiz_fl", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_meblag_alt_doviz_icin_gecersiz_fl", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            prmList.Add(new SqlParameter() { ParameterName = "@cha_meblag_orj_doviz_icin_gecersiz_fl", SqlDbType = SqlDbType.TinyInt, Value = 0 });
            
            int sonuc = -1;

            using (SqlCommand cmd = new SqlCommand(sqlStr, trn.Connection))
            {
                cmd.Transaction = trn;
                foreach (var item in prmList)
                {
                    cmd.Parameters.Add(item);
                }
                object recid = cmd.ExecuteScalar();
                if (recid != null)
                {
                    cmd.Parameters.Clear();
                    cmd.CommandText = string.Format("UPDATE CARI_HESAP_HAREKETLERI SET cha_RECid_RECno=cha_RECno WHERE cha_RECno={0}", recid.ToString());
                    cmd.ExecuteNonQuery();
                    sonuc = Convert.ToInt32(recid);
                }
            }
            return sonuc;
        }
    }
}